from rest_framework import serializers

from home.models import NavCategory, CourseCategory
from home.models import NavCategory, CourseCategory, Banner


class NavCategorySerializer(serializers.ModelSerializer):
    """
    导航分类序列化器类

    用于将NavCategory模型实例序列化为JSON格式数据，或将JSON数据反序列化为NavCategory模型实例。
    继承自Django REST Framework的ModelSerializer，自动处理模型字段的序列化和验证。

    Attributes:
        Meta: 配置序列化器的元数据

    Returns:
        NavCategorySerializer: 导航分类序列化器实例
    """

    class Meta:
        """
        序列化器元数据配置

        定义了序列化器关联的模型和需要序列化的字段。

        Attributes:
            model: 关联的Django模型类，此处为NavCategory模型
            fields: 需要序列化的字段列表，包括：
                - id: 分类唯一标识符
                - name: 分类名称
                - weight: 分类权重（用于排序）
                - external_link: 外部链接地址
        """

        model = NavCategory
        fields = ['id','name','weight','external_link']


class CourseCategorySerializer(serializers.ModelSerializer):
    """
    课程分类序列化器类

    用于将CourseCategory模型实例序列化为JSON格式数据，或将JSON数据反序列化为CourseCategory模型实例。
    继承自Django REST Framework的ModelSerializer，自动处理模型字段的序列化和验证。

    """
     #创建了一个字段:children,它的值来自于一个方法, get_
    children = serializers.SerializerMethodField()

    def get_children(self, obj):
        """
        获取当前分类的子分类
        """

        print(obj)
        children = CourseCategory.objects.filter(parent_id=obj)
        if children:
            ser = CourseCategorySerializer(children, many=True)
            return ser.data
        else:
            return []


    class Meta:
        """
        序列化器元数据配置

        定义了序列化器关联的模型和需要序列化的字段。
        """



        model = CourseCategory
        fields = ['id','name','level','children','desp']

class BannerSerializer(serializers.ModelSerializer):
    """
    轮播图序列化器类

    用于将Banner模型实例序列化为JSON格式数据，或将JSON数据反序列化为Banner模型实例。
    继承自Django REST Framework的ModelSerializer，自动处理模型字段的序列化和验证。

    """


    class Meta:
        """
        序列化器元数据配置

        定义了序列化器关联的模型和需要序列化的字段。
        """

        model = Banner
        fields = ['id','title','image','link']

